<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-us" lang="en-us">
<head>
  <link href="https://gmpg.org/xfn/11" rel="profile">
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <meta name="generator" content="Hugo 0.68.3" />

  
  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <title>django基础知识 &middot; 我的博客</title>
  <meta name="description" content="" />

  
  <link type="text/css" rel="stylesheet" href="/my_technology_blog/css/print.css" media="print">
  <link type="text/css" rel="stylesheet" href="/my_technology_blog/css/poole.css">
  <link type="text/css" rel="stylesheet" href="/my_technology_blog/css/syntax.css">
  <link type="text/css" rel="stylesheet" href="/my_technology_blog/css/hyde.css">
    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Abril+Fatface|PT+Sans:400,400i,700">


  
  <link rel="apple-touch-icon-precomposed" sizes="144x144" href="/apple-touch-icon-144-precomposed.png">
  <link rel="shortcut icon" href="/favicon.png">

  
  
</head>

  <body class="theme-base-09 ">
  <aside class="sidebar">
  <div class="container sidebar-sticky">
    <div class="sidebar-about">
      <a href="/my_technology_blog/"><h1>我的博客</h1></a>
      <p class="lead">
       这里是任永刚的个人博客 
      </p>
    </div>

    <nav>
      <ul class="sidebar-nav">
        <li><a href="/my_technology_blog/">Home</a> </li>
        
      </ul>
    </nav>

    <p>&copy; 2020. All rights reserved. </p>
  </div>
</aside>

    <main class="content container">
    <div class="post">
  <h1>django基础知识</h1>
  <time datetime=2020-04-22T00:00:00Z class="post-date">Wed, Apr 22, 2020</time>
  <h2 id="1-django创建项目的命令">1 Django创建项目的命令：</h2>
<pre><code>django-admin startproject 项目名称
python manage.py startapp app名称
</code></pre>
<h2 id="2django-创建项目后项目文件夹下的组成部分对-mvt-的理解">2Django 创建项目后，项目文件夹下的组成部分（对 mvt 的理解）？</h2>
<pre><code>manage.py是项目运行的入口，指定配置文件路径
__init.py 是一个空文件，作用是这个目录可以被当作包使用。
settings.py 项目整体配置文件
urls.py 是项目的路由配置文件
wsgi.py 是项目与 WSGI 兼容的 Web 服务器。
</code></pre>
<h2 id="3对mvcmtv的理解">3对MVC,MTV的理解</h2>
<pre><code>首先；来说MVC
M: model 模型，和数据库进行交互
V: view 视图，负责产生html文件以及吧文件传到页面上
C: Controller控制器，接收请求，进行处理，与 M 和 V 进行交互，返回应答
</code></pre>
<h2 id="用户点击注册按钮将要注册的内容发送给网站的服务器">用户点击注册按钮，将要注册的内容发送给网站的服务器。</h2>
<pre><code>2、 View 视图，接收到用户发来的注册数据，View 告诉 Model 将用户的注册信息保存进数据库。
3、 Model 层将用户的注册信息保存到数据库中。
4、 数据库将保存的结果返回给 Model
5、 Model 将保存的结果给 View 视图。
6、 View 视图告诉 Template 模板去产生一个 Html 页面。
7、 Template 生成 html 内容返回给 View 视图
8、 View 将 html 页面内容返回给浏览器。
9、 浏览器拿到 view 返回的 html 页面内容进行解析，展示。
</code></pre>
<h2 id="mtv是根据mvc演变的">MTV是根据MVC演变的</h2>
<pre><code>Django 中 models 利用 ORM 对 Mysql 进行查表的语句
all():返回模型类对应表格中的所有数据。
get():返回表格中满足条件的一条数据，如果查到多条数据，则抛异常：MultipleObjectsReturned，
查询不到数据，则抛异常：DoesNotExist。
filter():参数写查询条件，返回满足条件 QuerySet 集合数据

模糊查询 like
例：查询书名包含’传’的图书。contains

contains BookInfo.objects.filter(btitle__contains=’传’)
空查询 where 字段名 isnull

BookInfo.objects.filter(btitle__isnull=False)
范围查询 where id in (1，3，5)

BookInfo.objects.filter(id__in=[1，3，5])
比较查询 gt lt(less than) gte(equal) lte

BookInfo.objects.filter(id__gte=3)
5. exclude:返回不满足条件的数据。

BookInfo.objects.exclude(id=3)
</code></pre>
<h1 id="聚合函数">聚合函数</h1>
<h2 id="作用对查询结果进行聚合操作">**作用：对查询结果进行聚合操作。</h2>
<pre><code>sum count max min avg**
aggregate：调用这个函数来使用聚合。

from django.db.models import Sum，Count，Max，Min，Avg
例：BookInfo.objects.aggregate(Count(‘id’))
count 函数
作用：统计满足条件数据的数目。
例：统计所有图书的数目。
BookInfo.objects.all().count()
例：统计 id 大于 3 的所有图书的数目。

BookInfo.objects.filter(id__gt = 3).count()
</code></pre>
<h2 id="模型类关系">模型类关系</h2>
<pre><code>一对多关系
例：图书类-英雄类
models.ForeignKey() 定义在多的类中。
2）多对多关系
例：新闻类-新闻类型类
models.ManyToManyField() 定义在哪个类中都可以。
3）一对一关系
例：员工基本信息类-员工详细信息类
models.OneToOneField() 定义在哪个类中都可以。
</code></pre>
<h2 id="要注意-wsgi--uwsgi--uwsgi-这三个概念的区分">要注意 WSGI / uwsgi / uWSGI 这三个概念的区分</h2>
<pre><code>WSGI 是一种通信协议。
uwsgi 是一种线路协议而不是通信协议，在此常用于在 uWSGI 服务器与其他网络服务器的数据通信。
uWSGI 是实现了 uwsgi 和 WSGI 两种协议的 Web 服务器
</code></pre>
<h2 id="django-开发中数据库做过什么优化">django 开发中数据库做过什么优化?(</h2>
<pre><code>1.设计表时，尽量少使用外键，因为外键约束会影响插入和删除性能；
2.使用缓存，减少对数据库的访问；
3.在 orm 框架下设置表时，能用 varchar 确定字段长度时，就别用 text；
4.可以给搜索频率高的字段属性，在定义时创建索引；
5.Django orm 框架下的 Querysets 本来就有缓存的；
6.如果一个页面需要多次连接数据库，最好一次性取出所有需要的数据，减少对数据库的查询次数；
7.若页面只需要数据库里某一个两个字段时，可以用 QuerySet.values()；
8.在模板标签里使用 with 标签可以缓存 Qset 的查询结果。

验证码过期时间怎么设置？ (2018-4-14-lxy)
将验证码保存到数据库或 session，设置过期时间为 1 分钟，然后页面设置一个倒计时(一般是前端
js 实现 这个计时)的展示，一分钟过后再次点击获取新的信息
</code></pre>
<h2 id="10django-如何提升性能高并发">10.django 如何提升性能（高并发）？</h2>
<pre><code>对一个后端开发程序员来说，提升性能指标主要有两个一个是并发数，另一个是响应时间网站性能
的优化一般包括 web 前端性能优化，应用服务器性能优化，存储服务器优化。
对前端的优化主要有：
1.减少 http 请求，减少数据库的访问量，比如使用雪碧图。
2.使用浏览器缓存，将一些常用的 css，js，logo 图标，这些静态资源缓存到本地浏览器，通过设
置 http 头中的 cache-control 和 expires 的属性，可设定浏览器缓存，缓存时间可以自定义。
3 对 html，css，javascript 文件进行压缩，减少网络的通信量。
对我个人而言，我做的优化主要是以下三个方面：
1.合理的使用缓存技术，对一些常用到的动态数据，比如首页做一个缓存，或者某些常用的数据做
个缓存，设置一定得过期时间，这样减少了对数据库的压力，提升网站性能。
2.使用 celery 消息队列，将耗时的操作扔到队列里，让 worker 去监听队列里的任务，实现异步操
作，比如发邮件，发短信
3.就是代码上的一些优化，补充：nginx 部署项目也是项目优化，可以配置合适的配置参数，提升
效率，增加并发量。
4.如果太多考虑安全因素，服务器磁盘用固态硬盘读写，远远大于机械硬盘，这个技术现在没有普
及，主要是固态硬盘技术上还不是完全成熟， 相信以后会大量普及。
5.另外还可以搭建服务器集群，将并发访问请求，分散到多台服务器上处理。
6.最后就是运维工作人员的一些性能优化技术了。
</code></pre>
<h2 id="状态码">状态码：</h2>
<pre><code>服务器向用户返回的状态码和提示信息，常用的有：
200 OK ：服务器成功返回用户请求的数据
201 CREATED ：用户新建或修改数据成功。
202 Accepted：表示请求已进入后台排队。
400 INVALID REQUEST ：用户发出的请求有错误。
401 Unauthorized ：用户没有权限。
403 Forbidden ：访问被禁止。
404 NOT FOUND ：请求针对的是不存在的记录。
406 Not Acceptable ：用户请求的的格式不正确。
500 INTERNAL SERVER ERROR ：服务器发生错误。
</code></pre>
<h2 id="django-关闭浏览器怎样清除-cookies-和-session">django 关闭浏览器，怎样清除 cookies 和 session？</h2>
<pre><code>以键值对的格式写会话。
request.session[‘键’]=值
根据键读取值。
request.session.get(‘键’,默认值)
清除所有会话，在存储中删除值部分。
request.session.clear()
清除会话数据，在存储中删除会话的整条数据。
request.session.flush()
Session 依赖于 Cookie，如果浏览器不能保存 cookie 那么 session 就失效了。因为它需要浏览
器的 cookie 值去 session 里做对比。session 就是用来在服务器端保存用户的会话状态。
cookie 可以有过期时间，这样浏览器就知道什么时候可以删除 cookie 了。 如果 cookie 没有设
置过期时间，当用户关闭浏览器的时候，cookie 就自动过期了。你可以改变
Session 采用的是在服务器端保持状态的方案，而 Cookie 采用的是在客户端保持状态的方案。但
是禁用 Cookie 就不能得到 Session。因为 Session 是用 Session ID 来确定当前对话所对应的服务
器 Session，而 Session ID 是通过 Cookie 来传递的，禁用 Cookie 相当于失去了 SessionID，也
就得不到 Session。
</code></pre>

</div>


    </main>

    
      
    
  </body>
</html>
